package com.ssy.lingxi.platform.template.service.controller.web;

import com.ssy.lingxi.common.controller.BaseController;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.platform.template.service.entity.adorn.PageTemplate;
import com.ssy.lingxi.platform.template.service.model.dto.common.IdDTO;
import com.ssy.lingxi.platform.template.service.model.dto.common.OpenMroDTO;
import com.ssy.lingxi.platform.template.service.model.dto.common.SiteIdShopIdDTO;
import com.ssy.lingxi.platform.template.service.model.dto.common.TemplateInfoDTO;
import com.ssy.lingxi.platform.template.service.model.dto.web.PageTemplateTypeDTO;
import com.ssy.lingxi.platform.template.service.model.dto.web.ShelfTemplateDTO;
import com.ssy.lingxi.platform.template.service.model.vo.web.PageTemplateVO;
import com.ssy.lingxi.platform.template.service.model.vo.web.UseWebPlatformTemplateVO;
import com.ssy.lingxi.platform.template.service.service.web.PageTemplateWebService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

/**
 * @author fhj
 * @version 2.0.0
 * @menu web - 页面模板
 * @date 2020/12/11
 */
@Api(tags = "web - 页面模板")
@RestController
@RequestMapping("/template/web/pageTemplateWeb")
public class PageTemplateWebController extends BaseController {

    @Resource
    private PageTemplateWebService pageTemplateWebService;

    /**
     * 启用/停用mro模式
     *
     * @param openMroDTO 请求参数
     * @return 操作结果
     */
    @PostMapping("/openMro")
    public Wrapper<Void> openMro(@RequestBody @Valid OpenMroDTO openMroDTO) {
        return pageTemplateWebService.openMro(openMroDTO, isLogin() ? getSysUser() : null);
    }

    /**
     * 获取使用中的WEB平台首页模板
     *
     * @param provinceCode 省code
     * @param cityCode     城市code
     * @return 操作结果
     */
    @GetMapping("/findPlatformTemplate")
    public Wrapper<UseWebPlatformTemplateVO> findPlatformTemplate(String provinceCode, String cityCode) {
        return pageTemplateWebService.findPlatformTemplate(getHeadersSiteId(), provinceCode, cityCode);
    }

    /**
     * 获取使用中的WEB企业商城模板
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @GetMapping("/findEnterpriseTemplate")
    public Wrapper<PageTemplate> findEnterpriseTemplate(@Valid SiteIdShopIdDTO dto) {
        return pageTemplateWebService.findEnterpriseTemplate(dto);
    }

    /**
     * 获取使用中的WEB自营商城模板
     *
     * @param memberId 会员id
     * @param shopId   商城id
     * @return 操作结果
     */
    @GetMapping("/findSelfTemplate")
    public Wrapper<PageTemplate> findSelfTemplate(Long memberId, Long shopId) {
        return pageTemplateWebService.findSelfTemplate(memberId, shopId);
    }

    /**
     * 获取使用中的商品描述模板
     *
     * @return 操作结果
     */
    @GetMapping("/findGoodsDescribeTemplate")
    public Wrapper<PageTemplate> findGoodsDescribeTemplate() {
        return pageTemplateWebService.findGoodsDescribeTemplate(getHeadersSiteId());
    }

    /**
     * 根据模板类型获取所有模板
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @GetMapping("/findAllTemplateByType")
    public Wrapper<List<PageTemplate>> findAllTemplateByType(@Valid PageTemplateTypeDTO dto) {
        return pageTemplateWebService.findAllTemplateByType(dto, getPlatformUser());
    }

    /**
     * 获取模板详情(平台后台使用)
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @GetMapping("/findTemplateDetails")
    public Wrapper<PageTemplate> findTemplateDetails(@Valid IdDTO dto) {
        return pageTemplateWebService.findTemplateDetails(dto, getPlatformUser());
    }

    /**
     * 上下架模板
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @PostMapping("/shelfTemplate")
    public Wrapper<Void> shelfTemplate(@RequestBody @Valid ShelfTemplateDTO dto) {
        return pageTemplateWebService.shelfTemplate(dto, getPlatformUser());
    }

    /**
     * 获取所有已上架的店铺模板
     *
     * @return 操作结果
     */
    @GetMapping("/findAllShelfShopTemplate")
    public Wrapper<List<PageTemplateVO>> findAllShelfShopTemplate() {
        return pageTemplateWebService.findAllShelfShopTemplate(getSysUser());
    }

    /**
     * 获取店铺模板详情
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @GetMapping("/findShopTemplateDetails")
    public Wrapper<PageTemplateVO> findShopTemplateDetails(@Valid IdDTO dto) {
        return pageTemplateWebService.findShopTemplateDetails(dto, getSysUser());
    }

    /**
     * 使用店铺模板
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @PostMapping("/useShopTemplate")
    public Wrapper<Void> useShopTemplate(@RequestBody @Valid IdDTO dto) {
        return pageTemplateWebService.useShopTemplate(dto, getSysUser());
    }

    /**
     * 获取所有已上架的渠道模板
     *
     * @return 操作结果
     */
    @GetMapping("/findAllShelfChannelTemplate")
    public Wrapper<List<PageTemplateVO>> findAllShelfChannelTemplate() {
        return pageTemplateWebService.findAllShelfChannelTemplate(getSysUser());
    }

    /**
     * 获取渠道模板详情
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @GetMapping("/findChannelTemplateDetails")
    public Wrapper<PageTemplateVO> findChannelTemplateDetails(IdDTO dto) {
        return pageTemplateWebService.findChannelTemplateDetails(dto, getSysUser());
    }

    /**
     * 使用渠道模板
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @PostMapping("/useChannelTemplate")
    public Wrapper<Void> useChannelTemplate(@RequestBody @Valid IdDTO dto) {
        return pageTemplateWebService.useChannelTemplate(dto, getSysUser());
    }

    /**
     * 获取所有活动模板
     *
     * @param dto         请求参数
     * @param environment 环境类型
     * @return 操作结果
     */
    @GetMapping("/findAllActivityTemplate")
    public Wrapper<PageData<PageTemplate>> findAllActivityTemplate(PageVO dto, Integer environment) {
        return pageTemplateWebService.findAllActivityTemplate(dto, environment);
    }

    /**
     * 获取所有自营商城模板
     *
     * @return 操作结果
     */
    @GetMapping("/findAllSelfTemplate")
    public Wrapper<List<PageTemplateVO>> findAllSelfTemplate() {
        return pageTemplateWebService.findAllSelfTemplate(getSysUser());
    }

    /**
     * 获取自营商城模板详情
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @GetMapping("/findSelfTemplateDetails")
    public Wrapper<PageTemplateVO> findSelfTemplateDetails(@Valid IdDTO dto) {
        return pageTemplateWebService.findSelfTemplateDetails(dto, getSysUser());
    }

    /**
     * 使用自营商城模板
     *
     * @param dto 请求参数
     * @return 操作结果
     */
    @PostMapping("/useSelfTemplate")
    public Wrapper<Void> useSelfTemplate(@RequestBody @Valid TemplateInfoDTO dto) {
        return pageTemplateWebService.useSelfTemplate(dto, getSysUser());
    }
}
